package com.tmxk.api.days03.wmh;

/**
 * String,StringBuffer,StringBuilder三者使用
 * 频繁(添加，删除，更新)操作字符串对比，建议使用StringBuffer，效率高，内存占用少，
 * 跟String频繁操作字符串对比，该方式会频繁创建新的空间，存储数据，效率低，内存占用不高，浪费内存空间。
 * StringBuffer和StringBuilder对字符串是相同操作。
 * StringBuffer是线程安全的字符串扩展类，StringBuilder是线程非安全的字符串扩展类。
 * 常识：在项目中，频繁操作字符时，使用StringBuffer，处理效率更高，内存占用率也少。
 **/
public class StringOperDemo {
    //成员变量，成员变量存在在堆中
    String str = "abc";
    String str1 = "abc";
    String str2 = new String("abc");
    String str3 = new String("abc");
    //StringBuffer是在原来的基础上加123
    StringBuffer sb1 = new StringBuffer("abc");
    StringBuffer sb2 = new StringBuffer("abc");

    public void method() {
        //局部变量，存在在栈中
        System.out.println(str == str1);
        System.out.println(str == str2);
        System.out.println(str2 == str3);
        System.out.println(str2.intern() == str3.intern());

        System.out.println("\n比较str和str123进行比较");
        str = str.concat("123");
        String str123 = "abc123";
        System.out.println(str == str123);

    }

    public void stringMethod() {
        System.out.println(sb1 == sb2);
        System.out.println(sb1.equals(sb2));
        //append()
        sb1.append("123");
        StringBuffer sb3 = new StringBuffer("abc123");
        System.out.println("sb1.equals(sb2)；" + sb1.toString().equals(sb3.toString()));//true
    }

    public static void main(String[] args) {
        //
        int num = 10;

    }
}